package cga;

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import cga.framework.Osobnik;
import cga.framework.Populacja;

public class Program {
	public static void main(String[] args) throws CloneNotSupportedException{
		//Ramka rama = new Ramka(400, 300);
		//rama.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//rama.show();
		Osobnik osobnik = new Osobnik(1.0, 1.75, 5);
		osobnik.showChromosom();
		osobnik.mutuj(70);
		osobnik.showChromosom();
		System.out.println(osobnik.zamiana());
		System.out.println("Wartosc reprezentowana: "+osobnik.wynik());
		System.out.println(osobnik.przystosowanie());
		
		System.out.println("-----------------------------------------------------------------------------");
		
		Populacja stadko = new Populacja(100, 1.0, 1.5, 8);
		stadko.showStado();
		stadko.ocenPrzystosowanie();
		stadko.showPrzystosowanie();
		stadko.obliczPrawdopodobienstwoWyboru();
		stadko.showPrawdopodobienstwoWyboru();
		stadko.Selection();
		System.out.println("Wyselekcojowalem osobnikow.");
		stadko.Crossover();
		stadko.showStadoTemp();
	}

}

class Ramka extends JFrame{
	private JTextField polePoczatekPrzedzialu;
	private JTextField poleKoniecPrzedzialu;
	private JTextField poleDokladnosc;
	private JTextField poleWielkoscStada;
	private JLabel opisPoczatekPrzedzialu;
	private JLabel opisKoniecPrzedzialu;
	private JLabel opisDokladnosc;
	private JLabel opisWielkoscStada;
	public Ramka(int height, int width){
		setTitle("KAG- Klasyczny Algorytm Genetyczny");
		setSize(height, width);
		
		Container zawartosc = getContentPane();
		
		JPanel panel = new JPanel();
		polePoczatekPrzedzialu = new JTextField("00",3);
		poleKoniecPrzedzialu = new JTextField("00",3);
		poleDokladnosc = new JTextField("00",3);
		poleWielkoscStada = new JTextField("00",3);
		
		opisPoczatekPrzedzialu = new JLabel("Podaj poczatek przedzialu:");
		opisKoniecPrzedzialu = new JLabel("Podaj koniec przedzialu:");
		opisDokladnosc = new JLabel("Podaj dokladnosc (ilosc miejsc po przecinku)");
		opisWielkoscStada = new JLabel("Podaj wielkosc stada");
		
		panel.add(opisPoczatekPrzedzialu,BorderLayout.EAST);
		panel.add(polePoczatekPrzedzialu,BorderLayout.WEST);
		panel.add(opisKoniecPrzedzialu,BorderLayout.EAST);
		panel.add(poleKoniecPrzedzialu,BorderLayout.WEST);
		panel.add(opisDokladnosc,BorderLayout.EAST);
		panel.add(poleDokladnosc,BorderLayout.WEST);
		panel.add(opisWielkoscStada,BorderLayout.EAST);
		panel.add(poleWielkoscStada,BorderLayout.WEST);
		
		zawartosc.add(panel,BorderLayout.CENTER);
	}
}
